package types

import (
	"com/study/util"
	"encoding/json"
	"fmt"
)

// 结构体默认是值拷贝，数据相互独立
type stu struct {
	Name string
	// 后面的tag标签可以让json序列化的时候以这个字段序列化
	Age int `json:"age"`
}

// 基于类型Stu定义Stu2
type Stu2 stu

// 给Stu绑定方法
func (receiver stu) ToString() {
	util.PrnType(receiver)
}
func (receiver stu) test() {
	fmt.Println(123456)
}

// 工厂模式
func Stu(name string, age int) *stu {
	return &stu{name, age}
}

// 结构体继承
type Parent struct {
	Name string
}

type Sub struct {
	Parent
	Name string
}

func (receiver Parent) Test() {
	fmt.Println(123456)
}

func Struct() {
	stu1 := stu{"name", 20}
	util.PrnType(stu1)
	// 结构体之间转换必须完全一致 - 变量名称及类型及数量
	util.PrnType(Stu2(stu1))
	// json序列化
	marshal, _ := json.Marshal(stu1)
	util.PrnType(marshal)
	stu1.ToString()

	// 类型互转

}
